package com.bootdo.shop.service;

import java.util.List;

import com.bootdo.shop.domain.Category;
import com.bootdo.shop.domain.GoodsCategory;
import com.bootdo.shop.domain.GoodsImage;
import com.bootdo.shop.domain.GoodsLimit;
import com.bootdo.shop.domain.GoodsSortConfig;
import com.bootdo.shop.domain.request.GoodsReq;
import com.bootdo.shop.domain.response.GoodsRes;
import com.bootdo.shop.domain.response.ShoppingCartRes;

/** 
 * @author 作者 : chenxuan
 * @version 创建时间：2015年12月29日 下午4:13:46 
 * 类说明 
 */
public interface GoodsService {
	
	/**
	 * 减库存
	 * @param goodsId
	 * @param num
	 */
	public void subtractStock(Integer goodsId,Integer num, Integer specificationId);

	/**
	 * 增加库存
	 * @param goodsId
	 * @param num
	 */
	public void increaseStock(Integer goodsId,Integer num, Integer specificationId);
	
	/**
	 * 更新商品购买数量
	 * @param goodsId
	 */
	public void updateGoodsBuyNumber(String orderNo);
	
	
	/**
	 * 首页商品列表
	 * @param goodReq
	 * @return
	 */
	public List<GoodsRes> getHomeList(GoodsReq goodReq);
	/**
	 * 商品详情
	 * @param goodReq
	 * @return
	 */
	public GoodsRes goodsDetail(GoodsReq goodReq);
	/**
	 * 商品分类列表
	 * @return
	 */
	public List<Category> categoryList();
	
	/**
	 * 获取分类
	 * @param id
	 * @return
	 */
	public Category getCategoryById(Integer id);
	/**
	 * 获取商品在哪些分类下
	 * @param goodsId
	 * @return
	 */
	public List<GoodsCategory> getCategoryByGoodsId(Integer goodsId);
	/**
	 * 后台所有分类
	 * @return
	 */
	public List<Category> categoryListByManager();
	/**
	 * 商品排序列表
	 * @return
	 */
	public List<GoodsSortConfig> sortList();
	/**
	 * 商品列表
	 * @param goodsReq
	 * @return
	 */
	public List<GoodsRes> goodsList(GoodsReq goodsReq);
	
	/**
	 * 商品列表
	 * @param goodsReq
	 * @return
	 */
	public Integer goodsListCount(GoodsReq goodsReq);
	
	/**
	 * 根据商品ID获取商品详情
	 * @param goodsId
	 * @return
	 */
	public GoodsRes getGoodsDetailById(Integer goodsId);
	
	/**
	 * 获取SKU 名称
	 * @param storeItemId
	 * @return
	 */
	public String getStoreItemName(Integer storeItemId);
	/**
	 * 修改分类
	 * @param category
	 * @return
	 */
	public Integer modifyCategory(Category category);
	/**
	 * 添加分类
	 * @param category
	 * @return
	 */
	public Integer addCategory(Category category);
	/**
	 * 更新商品
	 * @param goodsReq
	 * @return
	 */
	public Integer updateGoods(GoodsReq goodsReq);
	/**
	 * 新增商品
	 * @param goodsReq
	 * @return
	 */
	public Integer addGoods(GoodsReq goodsReq);
	/**
	 * 删除图片
	 * @param goodsImage
	 * @return
	 */
	public Integer deleteImage(GoodsImage goodsImage);
	
	public void coverPriceForGoods(Integer memberLevel,Integer agentLevel,List<GoodsRes> goods);
	
	public void coverPric(Integer memberLevel, Integer agentLevel, GoodsRes goods);

	public void coverPriceFprCart(Integer memberLevel,Integer agentLevel,List<ShoppingCartRes> shoppingCartList);  
	
	public List<GoodsLimit> getGoodsLimit(Integer goodsId);
}